package com.shujia.wyh.day16;

/*
        StringBuffer类概述
        我们如果对字符串进行拼接操作，每次拼接，都会构建一个新的String对象，既耗时，又浪费空间。
        而StringBuffer就可以解决这个问题
        线程安全的可变字符序列

       线程安全：
        1、安全，代表着没有同步操作的出现，数据是安全的，但是效率低
        2、不安全，代表着有同步操作出现，效率相比较安全情况，会高
        3、在IT行业开发中，效率和安全一直都是一个头疼的问题
        5、举例生活中有哪些线程安全或者不安全的问题
            线程安全：银行相关的业务，医院取号，电影院售票  效率
            线程不安全的：视频会员，博客评论，效率高

       public final class StringBuffer
        线程安全，可变的字符序列。
        字符串缓冲区就像一个String ，但可以修改。
        在任何时间点，它包含一些特定的字符序列，但可以通过某些方法调用来更改序列的长度和内容。

        简单记忆：它就是一个线程安全的可变字符串

      （面试题）StringBuffer与String的区别：
        1、String长度和内容一旦确定就不能被改变，而StringBuffer长度和内容都是可以发生改变的
        2、StringBuffer可以提前给出一个容器，StringBuffer提前给出一个缓冲区，可以进行字符串的拼接，而不会开辟新的空间
            String来说每做一次拼接都会开辟新的空间

       StringBuffer的构造方法：
            1、StringBuffer()
                构造一个没有字符的字符串缓冲区，初始容量为16个字符。
            2、StringBuffer(int capacity)
                构造一个没有字符的字符串缓冲区和指定的初始容量。
            3、StringBuffer(String str)
                构造一个初始化为指定字符串内容的字符串缓冲区。

       StringBuffer的方法：
        public int capacity()返回当前容量。 容量是新插入字符可用的存储量，超过此值将进行分配。
        public int length()返回长度（字符数）。

 */
public class StringBufferDemo1 {
    public static void main(String[] args) {
        //StringBuffer()
        //构造一个没有字符的字符串缓冲区，初始容量为16个字符。
        StringBuffer sb = new StringBuffer();
        System.out.println("sb:" + sb); //StringBuffer类中重写了父类Object中的toString()方法
        //我们要想验证初始容量，就得想办法获取到这个StringBuffer的容量值
        System.out.println("sb的容量为："+sb.capacity());
        System.out.println("sb中实际存储字符的个数为："+sb.length());

        System.out.println("===================================================================");

        //StringBuffer(int capacity)
        StringBuffer sb2 = new StringBuffer(50);
        System.out.println("sb2:" + sb2); //StringBuffer类中重写了父类Object中的toString()方法
        //我们要想验证初始容量，就得想办法获取到这个StringBuffer的容量值
        System.out.println("sb2的容量为："+sb2.capacity());
        System.out.println("sb2中实际存储字符的个数为："+sb2.length());
        System.out.println("===================================================================");
        //StringBuffer(String str)构造一个初始化为指定字符串内容的字符串缓冲区。
        StringBuffer sb3 = new StringBuffer("hello");
        System.out.println("sb3:" + sb3); //StringBuffer类中重写了父类Object中的toString()方法
        //我们要想验证初始容量，就得想办法获取到这个StringBuffer的容量值
        System.out.println("sb3的容量为："+sb3.capacity());
        System.out.println("sb3中实际存储字符的个数为："+sb3.length());


    }
}
